home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / util / time / EZCron.lha / EZCronGUI < prev    next >
Encoding:
Text File  |  1996-09-12  |  31.0 KB  |  1,096 lines

  1. /* EZCronGUI v1.7 by Jim Hines. ©1995-96 All Rights Reserved.
  2. ** Internet email me at <hines_j@wvlink.mpl.com>
  3. ** EZCronGUI is The Graphic User Interface for EZCron, ©1994-1996 Jim Hines.
  4. **
  5. ** 12-13-95 Added Speech Function to test subrtn.
  6. ** 12-22-95 Added Purge Function.
  7. ** 12-24-95 Added multi-windowing on prefs window
  8. ** 12-31-95 Added multi-windowing cyclegads on time and date fields
  9. **             Changed the main gui interface window and moved the new config
  10. **            button to the edit screen. Removed the Quik Add button altogether.
  11. ** 01-05-96 Added Weekdays, Weekends and Quarterly support.
  12. **             Added full online help subroutine.
  13. ** 01-07-96 Added Default Event Variable Handling. Opens prefs file at beginning
  14. **            and rereads it with the 'addefault' command.
  15. **            added online help for def event button.
  16. ** 08-25-96 Changes the cron.config file to reside in envarc: and RAM:ENV
  17. **            Great idea Paul. ;)
  18. ** 09-02-96 Moved the active config file to ram:t as the env: was causing HD
  19. **          activity with such programs as HDEnv. The cron.config is now BACK
  20. **            in s: but copied to t:
  21. ** 09-09-96 Started work on the range stuffs
  22. ** 09-10-96 Hourly time range routine added.
  23. ** 09-11-96 Fixed a few bugs and tightened the code up a bit.
  24. */
  25.  
  26. LF= '0a'x
  27. options results
  28.  
  29. address command 'copy s:cron.config t:'
  30.  
  31.     if ~show("L","rexxsupport.library") then
  32.            call addlib("rexxsupport.library", 0, -30)
  33.     
  34.     if ~show('L','rexxreqtools.library') then
  35.            call addlib("rexxreqtools.library", 0, -30, 0)
  36.         
  37.     if ~showlist( 'p', 'VAREXX' ) then do
  38.            address command 'run >nil: varexx'
  39.         call delay(25)
  40.         waitforport
  41.         waitforport
  42.     end
  43.  
  44.     address VAREXX
  45.     call openport("MAINWINPORT")  
  46.     load 'EZCron:EZC.gui MAINWINPORT'      
  47.     host = result     
  48.     address value host
  49.     show project0     
  50.  
  51. startup:
  52.  
  53.     if showlist('P', 'EZCRON_REXX') then do
  54.         settext text '"EZCron Daemon is Running"'
  55.     end
  56.  
  57.     if ~showlist('P', 'EZCRON_REXX') then do
  58.         settext text '"EZCron Daemon is NOT Running"'
  59.     end
  60.  
  61. /* ===== MAIN LOOP =======*/
  62. mainloop:
  63.  
  64.     do forever    /* Wait for the user to close the window */
  65.         settext datewin Date(USA)
  66.         setlist eventlist clear  /* CLEAR THE LISTVIEW WINDOW */
  67.  
  68.  
  69. /* ===== READ AND PARSE THE CONFIG FILE ===== */
  70.  
  71.         config = 's:cron.config'        /* Name of file for reading events from */
  72.         event. = 0
  73.  
  74.         if ~open(cronfile, config,'READ') then do
  75.             call message('No s:cron.config file present....exiting.')
  76.             exit 20
  77.         end
  78.  
  79.         errors = 0
  80.  
  81.         do until eof(cronfile)
  82.             /* Grab the line, parse the event and ignore the comments */
  83.             linein = readln(cronfile)
  84.             parse var linein line '#'
  85.  
  86.             next = event.0 + 1
  87.  
  88.             parse var line event.next.command event.next.pargs1 event.next.pargs2,
  89.             event.next.pargs3 event.next.pargs4 event.next.time event.next.date,
  90.             event.next.rng1 event.next.rng2 event.next.sfx event.next.txt
  91.  
  92.             event.next.date = translate(event.next.date, 'abcdefghijklmnopqrstuvwxyz',,
  93.                             'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  94.                             /* THE ABOVE TRANSLATES THE DATE TO LOWERCASE IF NOT NUMERIC */
  95.  
  96.             event.next.time = translate(event.next.time, 'abcdefghijklmnopqrstuvwxyz',,
  97.                             'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  98.                             /* THE ABOVE TRANSLATES THE TIME TO LOWERCASE IF NOT NUMERIC */
  99.  
  100.  
  101.             if line ~= '' then do  /* This keeps the commented out lines from appearing */
  102.                 setlist Eventlist event.next.command event.next.pargs1 event.next.pargs2 event.next.pargs3 event.next.pargs4 event.next.time event.next.date event.next.txt '************************'
  103.             end
  104.  
  105.             select
  106.                 when event.next.command = '' then iterate
  107.                 when event.next.command = '' then do
  108.                     iterate
  109.                 end
  110.                 otherwise event.0 = next
  111.             end
  112.         end                                /* end of: do until EOF */
  113.         call close(cronfile)
  114.  
  115. /* =====END OF PARSE SECTION == */
  116.  
  117.         do forever  /* THIS DO LOOP CONTROLS THE CLOCK AND CHECKS FOR A PACKET */
  118.             packet = getpkt( "MAINWINPORT" )
  119.             clock2 = LEFT(time('N'),5)    /* THIS GET RID OF THE SECONDS */
  120.             sec = right(time('N'), 2)  /* Get Seconds */
  121.             settext time time('N')
  122.             settext datewin Date(USA)
  123.             call delay(48)
  124.  
  125.             if packet ~= '00000000'x then do /* This is not a null message */
  126.                 class  = getarg(packet)    /* Get the information about the message */
  127.                     type = word(class, 1)
  128.                     msg = substr(class, 1,9) 
  129.                 call classes()
  130.             end
  131.         end
  132.  
  133.  
  134. classes:
  135.  
  136. /* =====CLASS CLOSEWINDOW ===== */
  137.         if class = closewindow then do
  138.             settext text 'Exiting EZCron'
  139.             call exiting() 
  140.         end
  141.  
  142. /* =====CLASS PAGEEDIT ===== */
  143.         if class = pageedit then call eventedit()
  144.  
  145.  
  146. /* =====CLASS AC_TOGGLE ===== */ 
  147.  
  148.         if class = AC_Toggle then do
  149.             if ~showlist('P', 'EZCRON_REXX') then do    
  150.                 address command 'run >nil: rx >nil: EZCron start'
  151.                 waitforport
  152.                 settext text '"EZCron Daemon is running."'
  153.                 call mainloop()
  154.             end    
  155.             else
  156.                 if showlist('P', 'EZCRON_REXX') then do    
  157.                 address command 'run >nil: rx >nil: EZCron stop'
  158.                 busy set /* Turn on busy pointer */
  159.             
  160.                 do until ~showlist('P', 'EZCRON_REXX')
  161.                     sec2 = 60 - right(time(n), 2) /* 60 (seconds) minus sec2) */
  162.                     if sec2 = 60 then sec2 = 00
  163.                     settext text '"Exiting daemon in:"' sec2 'seconds.'
  164.                     settext time time(n)
  165.                     call delay(49)
  166.                 end
  167.                 settext text '"EZCron Daemon is NOT Running"'
  168.             end
  169.         busy /* Turn off Busy Pointer */
  170.         call mainloop()
  171.         end
  172.     end         /* End of first big do forever loop */
  173.  
  174. /* ===== EDITEVENT SUBROUTINE ========= */
  175.  
  176. eventedit:
  177.     hide
  178.     show editwindow
  179.     set sortgad blankgad1 disable
  180.  
  181. eventparse:
  182.     address value host  /* this is so the correct window's buttons work after closing other windows */
  183.     drop ev et ed arg1 arg2 arg3 arg4 sfx txt field /* this drops any variables that may be present */
  184.  
  185.     do forever
  186.         setlist selectevent clear
  187.         config = 's:cron.config'    /* Name of file for reading events from */
  188.         event. = 0
  189.     
  190.         if ~open(cronfile, config,'READ') then do
  191.             call message('No s:cron.config file present....exiting.')
  192.             exit 20
  193.         end
  194.     
  195.         errors = 0
  196.         do until eof(cronfile)
  197.             linein = readln(cronfile)
  198.             parse var linein line '#'
  199.             next = event.0 + 1
  200.     
  201.             parse var line event.next.command event.next.pargs1 event.next.pargs2,
  202.             event.next.pargs3 event.next.pargs4 event.next.time    event.next.date,
  203.             event.next.rng1 event.next.rng2 event.next.sfx event.next.txt
  204.  
  205.             event.next.date = translate(event.next.date, 'abcdefghijklmnopqrstuvwxyz',,
  206.                             'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  207.                             /* THE ABOVE TRANSLATES THE DATE TO LOWERCASE IF NOT NUMERIC */
  208.  
  209.             event.next.time = translate(event.next.time, 'abcdefghijklmnopqrstuvwxyz',,
  210.                             'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  211.                             /* THE ABOVE TRANSLATES THE TIME TO LOWERCASE IF NOT NUMERIC */
  212.  
  213.  
  214.             event.next.txt = strip(event.next.txt) /* This Gets rid of the leading & trailing spaces in the LAST variable
  215.                                                       If new fields are added, the variable must be changed to reflect this */
  216.     
  217.             if line ~= '' then do  /* This keeps the commented out lines from appearing */
  218.                 setlist selectevent event.next.command
  219.             end
  220.         
  221.             select
  222.                 when event.next.command = '' then iterate
  223.                 when event.next.command = '' then do
  224.                     iterate
  225.                 end
  226.                 otherwise event.0 = next
  227.             end
  228.         end
  229.         call close(cronfile)
  230.  
  231. /* ===== END OF PARSE  */
  232.  
  233. waitforpkt:
  234.         call waitpkt( "MAINWINPORT" )    /* Wait for a message from Varexx */
  235.         packet = getpkt( "MAINWINPORT" )        /* Get the message */
  236.  
  237.            if packet ~= '00000000'x then do /* This is not a null message */
  238.             class  = getarg(packet)    /* Get the information about the message */
  239.                type = word(class, 1)
  240.                msg = substr(class, 12,100)
  241. /*            say 'Message Var = ' msg           DEBUG STUFF
  242.             say 'Class Var = ' class
  243.             say 'Type Var = ' type
  244. */
  245. /* ===== CLASS EXIT EDITOR ===== */
  246.             if class = end then do /* This is the exit button */
  247.                 hide
  248.                 show project0
  249.                 call startup()
  250.             end
  251.  
  252. /* ===== CLASS QUIT PROGRAM ===== */
  253.  
  254.             if class = closewindow then call exiting()
  255.  
  256. /* ===== CLASS MAINHELP CHECK ===== */
  257.  
  258.             if class = 'MAINHELP TRUE' then call mainhelp()
  259.  
  260.  
  261. /* ===== CLASS PREFSGAD ===== */
  262.  
  263.             if class = prefsgad then do
  264.                 call openport(PREFSWINPORT)
  265.                 spawn PREFSWINPORT
  266.                 host2 = result
  267.                 address value host2
  268.                 show prefswindow
  269.                 call prefs()
  270.             end
  271.  
  272. /* ===== CLASS EDIT ===== */        
  273.             if class = EDIT then do
  274.                 if ~exists('EZCron:prefs/txted.prefs') then address command 'ed s:cron.config'
  275.                 if exists('EZCron:prefs/txted.prefs') then do
  276.                     open(edconfig, 'EZCron:prefs/txted.prefs', 'r')
  277.                     linein = readln(edconfig)
  278.                     address command linein 's:cron.config'
  279.                     close(edconfig)
  280.                     address command 'copy s:cron.config ram:t' /* 9-02-96 */
  281.                 end
  282.             end
  283.  
  284. /* ===== CLASS TEST EVENT ===== */
  285.  
  286.             if class = testevent then do
  287.                 if exists('EZCron:prefs/sfx.prefs') then do
  288.                     open(sfxconfig, 'EZCron:prefs/sfx.prefs', 'r')
  289.                     sfxplayer = readln(sfxconfig)
  290.                     close(sfxconfig)
  291.                 end
  292.  
  293.                 read event
  294.                 ev = RESULT
  295.     
  296.                 read arg1
  297.                 arg1 = RESULT
  298.                 if arg1 = '-' then arg1 = ''
  299.     
  300.                 read arg2
  301.                 arg2 = RESULT
  302.                 if arg2 = '-' then arg2 = ''
  303.  
  304.                 read arg3
  305.                 arg3 = RESULT
  306.                 if arg3 = '-' then arg3 = ''
  307.  
  308.                 read arg4
  309.                 arg4 = RESULT
  310.                 if arg4 = '-' then arg4 = ''
  311.  
  312.                 read sfx
  313.                 fx = RESULT
  314.                 if fx = '-' then fx = ''
  315.     
  316.                 read txtstr
  317.                 tx = result
  318.                 
  319.                 if ev ~= textreminder then do
  320. /*                    address command 'run >nil: 'ev arg1 arg2 arg3 arg4*/
  321.                     address command 'run >con:100/100/300/100/CronTestEvent/Close' ev arg1 arg2 arg3 arg4
  322.                 end
  323.     
  324.                 if fx ~= '' then do
  325.                         address command 'run >nil:' sfxplayer fx
  326.                 end
  327.     
  328.                 if ev = TEXTREMINDER then do
  329.                     address command 'run >nil: rx >nil: ezcron:rexx/Reminder.rexx' tx
  330.                     if showlist(h,SPEAK) then do
  331.                         address command 'echo' tx '>speak:'
  332.                     end
  333.                 end
  334.     
  335.                 drop ev arg1 fx tx sfxplayer
  336.             end
  337.     
  338. /* ===== CLASS GETFILE ===== */
  339.  
  340.             if class = getfile then do
  341.                 clock = time('N')
  342.                 clock2 = LEFT(clock,5)
  343.                 filename = rtfilerequest(, , "Pick a File To Run",OK, "rt_reqpos = reqpos_centerscr")
  344.                 settext event filename
  345.                 settext event_time clock2
  346.                 settext event_date Date(USA)
  347.                 settext arg1 '-'
  348.                 settext arg2 '-'
  349.                 settext arg3 '-'
  350.                 settext arg3 '-'
  351.                 settext rng1 '--'
  352.                 settext rng2 '--'
  353.                 settext sfx '-'
  354.                 settext txtstr '-'
  355.             end
  356.  
  357. /* ===== CLASS NEW CONFIG ===== */ 
  358.         if class = AC_New then do
  359.             if exists('EZCron:prefs/cprefs') then do
  360.                 open(prefs, 'EZCron:prefs/cprefs', 'r')
  361.                 defevent = readln(prefs)
  362.                 close(prefs)
  363.             end
  364.             if ~exists('s:cron.config') then do
  365.                     open(MkCfg, 's:cron.config',W)
  366.                     writeln(MkCfg, defevent)
  367.                     address command 'copy s:cron.config ram:t' /* 9-02-96 */
  368.                     close(MkCfg)
  369.             end
  370.         else
  371.             call rtezrequest("A cron.config file already exists."||LF||"Do you wish to overwrite it?.", "_Yes|_No", , "rt_reqpos = reqpos_centerscr")
  372.             if rtresult == 1 then do
  373.                 if exists('s:cron.config.old') then address command 'delete s:cron.config.old'
  374.                 address command 'rename s:cron.config s:cron.config.old'
  375.                 call delay(3)
  376.                 open(MkCfg, 's:cron.config','w')
  377.                 writeln(MkCfg, defevent)
  378.                 close(MkCfg)
  379.             end
  380.                 address command 'copy s:cron.config ram:t' /* 9-02-96 */
  381.         end     
  382.  
  383.     
  384. /* ===== CLASS REQUESTER GADS ===== */
  385.  
  386.             if class = arg1gad then do
  387.                 argname = rtfilerequest(, , "Pick a file argument",OK, "rt_reqpos = reqpos_centerscr")
  388.                 if argname = '' then argname = '-'
  389.                 settext arg1 argname
  390.             end
  391.     
  392.             if class = arg2gad then do
  393.                 argname = rtfilerequest(, , "Pick a file argument",OK, "rt_reqpos = reqpos_centerscr")
  394.                 if argname = '' then argname = '-'
  395.                 settext arg2 argname
  396.             end
  397.     
  398.             if class = arg3gad then do
  399.                 argname = rtfilerequest(, , "Pick a file argument",OK, "rt_reqpos = reqpos_centerscr")
  400.                 if argname = '' then argname = '-'
  401.                 settext arg3 argname
  402.             end
  403.     
  404.             if class = arg4gad then do
  405.                 argname = rtfilerequest(, , "Pick a file argument",OK, "rt_reqpos = reqpos_centerscr")
  406.                 if argname = '' then argname = '-'
  407.                 settext arg4 argname
  408.             end
  409.     
  410.             if class = sfxgad then do
  411.                 read sfx
  412.                 sfxtxt = result
  413.                 parse var sfxtxt device ':'
  414.                 if device = '-' then device = 'sys'
  415.                 argname = rtfilerequest(device':',, "Pick a soundfile",OK, "rt_reqpos = reqpos_centerscr")
  416.                 if argname = '' then argname = '-'
  417.                 settext sfx argname
  418.             end
  419.     
  420.             if class = txtgad then do
  421.                 read txtstr
  422.                 txt = result
  423.                 if txt = '-' then txt = '' 
  424.                 argname = rtgetstring(txt,'Enter Reminder String', 'Reminder Requester', ,'rt_reqpos = reqpos_centerscr')
  425.                 if argname = '' then call eventparse()
  426.                 clock = time('N')
  427.                 clock2 = LEFT(clock,5)
  428.                 settext txtstr argname
  429.                 settext event TextReminder
  430.                 settext event_time clock2
  431.                 settext event_date Date(USA)
  432.                 settext arg1 '-'
  433.                 settext arg2 '-'
  434.                 settext arg3 '-'
  435.                 settext arg3 '-'
  436.                 settext sfx '-'
  437.                 drop txt
  438.             end
  439.  
  440.             if class = datehelp then do
  441.                 call rtezrequest( " DATE HELP" || LF ||,
  442.                 " "    || LF ||,
  443.                 " These are possible date fields." || LF ||,
  444.                 " "    || LF ||,
  445.                 " "    || LF ||,
  446.                 " 01/01/95    * Run event once." || LF ||,
  447.                 " "    || LF ||,            
  448.                 " Mon-Fri     * Run event every " || LF ||,
  449.                 "               named day of week." || LF ||,
  450.                 " "    || LF ||,
  451.                 " Daily       * Run event every day." || LF ||,
  452.                 " "    || LF ||,
  453.                 " Weekdays    * Run event every" || LF ||,
  454.                 "               Monday-Friday only." || LF ||,
  455.                 " "    || LF ||,    
  456.                 " ", "More", ,)
  457.  
  458.  
  459.                 call rtezrequest( " DATE HELP" || LF ||,
  460.                 " "    || LF ||,
  461.                 " More possible date fields." || LF ||,
  462.                 " "    || LF ||,
  463.                 " "    || LF ||,
  464.                 " Weekend     * Run event every" || LF ||,
  465.                 "               Saturday & Sunday only." || LF ||,
  466.                 " "    || LF ||,    
  467.                 " Monthly-12  * Run event every month" || LF ||,
  468.                 "               on given date. The date" || LF ||,
  469.                 "               is specified AFTER the" || LF ||,
  470.                 "               hyphen." || LF ||,
  471.                 " "    || LF ||,
  472.                 " Every_#_ddd * This could actually be" || LF ||,
  473.                 "               typed as Every_3_Wed." || LF ||,
  474.                 "               This example would" || LF ||,
  475.                 "               execute an event every" || LF ||,
  476.                 "               3rd Wed. of the month." || LF ||,
  477.                 "               The '#' can be 1-5." || LF ||,
  478.                 "               The 'ddd' is a three" || LF ||,
  479.                 "               letter abbr. for day" || LF ||,
  480.                 "               of the week." || LF ||,
  481.                 " ", "Okay", ,)
  482.             call eventparse()
  483.             end
  484.  
  485.  
  486.             if class = timehelp then do
  487.                 call rtezrequest( " TIME HELP" || LF ||,
  488.                 " "    || LF ||,
  489.                 " These are possible time fields." || LF ||,
  490.                 " "    || LF ||,
  491.                 " "    || LF ||,
  492.                 " 14:40     * Run event at 2:40pm." || LF ||,
  493.                 " "    || LF ||,
  494.                 " Minute    * Run event once every" || LF ||, 
  495.                 "             minute." || LF ||,
  496.                 " "    || LF ||,            
  497.                 " Hourly    * Run event every hour" || LF ||,
  498.                 "             on the hour." || LF ||,
  499.                 " "    || LF ||,
  500.                 " Quarterly * Run event every 15" || LF ||,
  501.                 "             minutes." || LF ||,
  502.                 " ", "Okay", ,)
  503.             call eventparse()
  504.             end
  505.  
  506.             if class = rangehelp then do
  507.                 call rtezrequest( " RANGE HELP" || LF ||,
  508.                 " "    || LF ||,
  509.                 " This allows events to run within a time range." || LF ||,
  510.                 " Valid ranges could be:" || LF ||,
  511.                 " 18 - 24 for events from 6pm to midnight." || LF ||,
  512.                 " 00 - 05 for events from midnight to 5am." || LF ||,
  513.                 " " || LF ||,
  514.                 " See Docs for more detailed infomation." || LF ||,
  515.                 " ", "Okay", ,)
  516.             call eventparse()
  517.             end
  518.  
  519.  
  520.             if class = datefields then do
  521.                 call openport(DATEWINPORT)
  522.                 spawn DATEWINPORT
  523.                 host3 = result
  524.                 address value host3
  525.                 show datewindow
  526.                 call datefields()
  527.             end
  528.  
  529.             if class = timefields then do
  530.                 call openport(TIMEWINPORT)
  531.                 spawn TIMEWINPORT
  532.                 host4 = result
  533.                 address value host4
  534.                 show timewindow
  535.                 call timefields()
  536.             end
  537.  
  538. /* ===== CLASS PURGE EVENT ===== */
  539.             if class = purgegad then do
  540.  
  541.                 address command 'copy s:cron.config s:cron.config.old'
  542.                 address command 'delete s:cron.config'
  543.                 open(dfile, 's:cron.config', 'W') /* create it again*/
  544.                 address command 'copy s:cron.config ram:t' /* 9-02-96 */
  545.                 close(dfile)
  546.  
  547.                 do i = 1 to event.0
  548.                     /*say event.i.date*/
  549.                     parse var event.i.date month '/' day '/' year
  550.                     
  551.                     if day ~= '' & if year ~= '' then do 
  552.                         sortdate = '19'year''month''day
  553.                         eventdate = date('c',sortdate,'s')        /* number of days since..*/
  554.  
  555.                         currentdate = date(s) /* 19951221 */
  556.                         sortcurrent = date('c', currentdate, 's') /* number of days since..*/
  557.                         a = sortcurrent-eventdate
  558.                         /*say 'a equals =' a*/
  559.                         if a > 0 then event.i.command = delete  /* this are the files you DONT want to write */
  560.                     end
  561.  
  562.                     if event.i.command ~= delete then do    
  563.                         open(dfile, 's:cron.config', 'a')
  564.                         writeln(dfile, event.i.command event.i.pargs1, 
  565.                         event.i.pargs2 event.i.pargs3 event.i.pargs4,
  566.                         event.i.time event.i.date event.i.rng1,
  567.                         event.i.rng2 event.i.sfx event.i.txt)
  568.                         drop result
  569.                     end
  570.                     close(dfile)
  571.                     address command 'copy s:cron.config ram:t' /* 9-02-96 */
  572.                     drop total
  573.                 end
  574.             end
  575.  
  576. /* ===== CLASS UPDATE (MODIFY) EVENT ===== */
  577.             if class = update then do
  578.  
  579.                 read event
  580.                 ev = result
  581.                 if ev = '' then call message('No Event Field.')
  582.                 if ev = '' then call eventparse()
  583.                 if ev = 'None Selected' then call message('No Event Field.')
  584.                 if ev = 'None Selected' then call eventparse()
  585.  
  586.                  event.en.command = ''
  587.                 event.en.time = ''
  588.                 event.en.date = ''
  589.                 event.en.pargs1 = ''
  590.                 event.en.pargs2 = ''
  591.                 event.en.pargs3 = ''
  592.                 event.en.pargs4 = ''
  593.                 event.en.rng1 = ''
  594.                 event.en.rng2 = ''
  595.                 event.en.sfx = ''
  596.                 event.en.txt = ''
  597.     
  598.                 address command 'copy s:cron.config s:cron.config.old'
  599.                 address command 'delete s:cron.config'
  600.                 open(dfile, 's:cron.config', 'W') /* create it again*/
  601.                 close(dfile)
  602.                 address command 'copy s:cron.config ram:t' /* 9-02-96 */
  603.     
  604.                 read selectevent var h
  605.                 open(dfile, 's:cron.config', 'a')
  606.                 do n = 1 to h.count
  607.                     if event.n.time = '' then h.n = delete
  608.  
  609.                     if h.n ~= delete then
  610.                     writeln(dfile, h.n event.n.pargs1 event.n.pargs2,
  611.                     event.n.pargs3 event.n.pargs4 event.n.time,
  612.                     event.n.date event.n.rng1 event.n.rng2,
  613.                     event.n.sfx event.n.txt)
  614.                     drop result
  615.                 end
  616.                 close(dfile)
  617.                 address command 'copy s:cron.config ram:t' /* 9-02-96 */
  618.  
  619.                 read event
  620.                 ev = result
  621.                 if ev = '' then call message('No Event Field.')
  622.                 if ev = '' then call eventparse()
  623.                 if ev = 'None Selected' then call message('No Event Field.')
  624.                 if ev = 'None Selected' then call eventparse()
  625.                 
  626.                 read event_time
  627.                 et = result
  628.                 if et = '' then    call message('No Time Field.')
  629.     
  630.                 read event_date
  631.                 ed = result
  632.                 if ed = '' then call message('No Date Field.')
  633.  
  634.                  read arg1
  635.                 arg1 = result
  636.                 if arg1 = '' then arg1 = '-'
  637.                 read arg2
  638.                 arg2 = result
  639.                 if arg2 = '' then arg2 = '-'
  640.                  read arg3
  641.                 arg3 = result
  642.                 if arg3 = '' then arg3 = '-'
  643.                 read arg4
  644.                 arg4 = result
  645.                 if arg4 = '' then arg4 = '-'
  646.  
  647.                 read rng1
  648.                 rng1 = result
  649.                 if rng1 = '' then rng1 = '--'
  650.  
  651.                 read rng2
  652.                 rng2 = result
  653.                 if rng2 = '' then rng2 = '--'
  654.     
  655.                 read sfx
  656.                 sfx = result
  657.                 if sfx = '' then sfx = '-'
  658.     
  659.                 read txtstr
  660.                 txt = result
  661.                 if txt = '' then txt = '-'
  662.                 
  663.                 open(dfile, 's:cron.config', 'a')
  664.                 writeln(dfile, ev arg1 arg2 arg3 arg4 et ed rng1 rng2 sfx txt)
  665.                 close(dfile)
  666.                 drop ev et ed arg1 arg2 arg3 arg4 rng1 rng2 sfx txt
  667.                 address command 'copy s:cron.config ram:t' /* 9-02-96 */
  668.             end
  669.  
  670.  
  671.  
  672. /* ===== CLASS ADDEVENT ===== */
  673.  
  674.             if class = addevent then do
  675.                 read event
  676.                 ev = result
  677.                 if ev = '' then call message('No Event Field.')
  678.                 if ev = 'None Selected' then call message('No Event Field.')
  679.                 
  680.                 read event_time
  681.                 et = result
  682.                 if et = '' then    call message('No Time Field.')
  683.     
  684.                 read event_date
  685.                 ed = result
  686.                 if ed = '' then call message('No Date Field.')
  687.         
  688.                  read arg1
  689.                 arg1 = result
  690.                 if arg1 = '' then arg1 = '-'
  691.                 read arg2
  692.                 arg2 = result
  693.                 if arg2 = '' then arg2 = '-'
  694.                  read arg3
  695.                 arg3 = result
  696.                 if arg3 = '' then arg3 = '-'
  697.                 read arg4
  698.                 arg4 = result
  699.                 if arg4 = '' then arg4 = '-'
  700.  
  701.                 read rng1
  702.                 rng1 = result
  703.                 if rng1 = '' then rng1 = '--'
  704.  
  705.                 read rng2
  706.                 rng2 = result
  707.                 if rng2 = '' then rng2 = '--'
  708.     
  709.                 read sfx
  710.                 sfx = result
  711.                 if sfx = '' then sfx = '-'
  712.     
  713.                 read txtstr
  714.                 txt = result
  715.                 if txt = '' then txt = '-'
  716.                 
  717.                 if ev = '' then call eventparse()
  718.                 if ev = 'None Selected' then call eventparse()
  719.                 if et = '' then call eventparse()
  720.                 if ed = '' then call eventparse()
  721.  
  722.                 open(dfile, 's:cron.config', 'a')
  723.                 writeln(dfile, ev arg1 arg2 arg3 arg4 et ed rng1 rng2 sfx txt)
  724.                 close(dfile)
  725.                 drop ev et ed arg1 arg2 arg3 arg4 rng1 rng2 sfx txt
  726.                 address command 'copy s:cron.config ram:t' /* 9-02-96 */
  727.             call eventparse()
  728.             end
  729.             
  730.  
  731. /* ===== CLASS ADDEFAULT EVENT ===== */
  732.  
  733.             if class = addefault then do
  734.                 read event
  735.                 ev = result
  736.                 if ev = '' then call message('No Event Field.')
  737.                 if ev = 'None Selected' then call message('No Event Field.')
  738.                 
  739.                 read event_time
  740.                 et = result
  741.                 if et = '' then    call message('No Time Field.')
  742.     
  743.                 read event_date
  744.                 ed = result
  745.                 if ed = '' then call message('No Date Field.')
  746.         
  747.                  read arg1
  748.                 arg1 = result
  749.                 if arg1 = '' then arg1 = '-'
  750.                 read arg2
  751.                 arg2 = result
  752.                 if arg2 = '' then arg2 = '-'
  753.                  read arg3
  754.                 arg3 = result
  755.                 if arg3 = '' then arg3 = '-'
  756.                 read arg4
  757.                 arg4 = result
  758.                 if arg4 = '' then arg4 = '-'
  759.  
  760.                 read rng1
  761.                 rng1 = result
  762.                 if rng1 = '' then rng1 = '--'
  763.  
  764.                 read rng2
  765.                 rng2 = result
  766.                 if rng2 = '' then rng2 = '--'
  767.     
  768.                 read sfx
  769.                 sfx = result
  770.                 if sfx = '' then sfx = '-'
  771.     
  772.                 read txtstr
  773.                 txt = result
  774.                 if txt = '' then txt = '-'
  775.                 
  776.                 if ev = '' then call eventparse()
  777.                 if ev = 'None Selected' then call eventparse()
  778.                 if et = '' then call eventparse()
  779.                 if ed = '' then call eventparse()
  780.  
  781.                 address command 'delete ezcron:prefs/cprefs'
  782.                 open(dfile, 'ezcron:prefs/cprefs', 'w')
  783.                 writeln(dfile, ev arg1 arg2 arg3 arg4 et ed rng1 rng2 sfx txt)
  784.                 close(dfile)
  785.                 drop ev et ed arg1 arg2 arg3 arg4 rng1 rng2 sfx txt
  786.             call eventparse()
  787.             end
  788.             
  789.  
  790. /* ===== SELECTEVENT ===== */            
  791.  
  792.             if msg ~= '' & type = 'SELECTEVENT' then do
  793.     
  794.                 settext event msg
  795.                 read selectevent NUMBER
  796.                 en = RESULT  /* en is the event number */
  797.                 /*say 'en = ' en*/
  798.                                     
  799.                 settext event_time event.en.time
  800.                 settext event_date event.en.date
  801.                 settext arg1 event.en.pargs1
  802.                 settext arg2 event.en.pargs2
  803.                 settext arg3 event.en.pargs3
  804.                 settext arg4 event.en.pargs4
  805.                 settext rng1 event.en.rng1
  806.                 settext rng2 event.en.rng2
  807.                 settext sfx event.en.sfx
  808.                 settext txtstr event.en.txt
  809.     
  810. /*                say 'event.en.sfx =' event.en.sfx   DEBUG ROUTINES COMMENTED OUT
  811.                 say 'event.en.txt =' event.en.txt
  812.                 say 'event.0 = ' event.0
  813. */
  814.             end
  815.     
  816. /* ===== CLASS DELETE EVENT ===== */
  817.  
  818.             if class = delete_event then do
  819.                 event.en.command = ''
  820.                 event.en.time = ''
  821.                 event.en.date = ''
  822.                 event.en.pargs1 = ''
  823.                 event.en.pargs2 = ''
  824.                 event.en.pargs3 = ''
  825.                 event.en.pargs4 = ''
  826.                 event.en.rng1 = ''
  827.                 event.en.rng2 = ''
  828.                 event.en.sfx = ''
  829.                 event.en.txt = ''
  830.     
  831.                 address command 'copy s:cron.config s:cron.config.old'
  832.                 address command 'delete s:cron.config'
  833.                 open(dfile, 's:cron.config', 'W') /* create it again*/
  834.                 close(dfile)
  835.                 address command 'copy s:cron.config ram:t' /* 9-02-96 */
  836.     
  837.                 read selectevent var h
  838.                 open(dfile, 's:cron.config', 'a')
  839.                 do n = 1 to h.count
  840.                     if event.n.time = '' then h.n = delete
  841.     
  842.                     if h.n ~= delete then
  843.                     writeln(dfile, h.n event.n.pargs1 event.n.pargs2,
  844.                     event.n.pargs3 event.n.pargs4 event.n.time,
  845.                     event.n.date event.n.rng1 event.n.rng2,
  846.                     event.n.sfx event.n.txt)
  847.                     drop result
  848.                 end
  849.                 close(dfile)
  850.                 address command 'copy s:cron.config ram:t' /* 9-02-96 */
  851.     
  852.                 settext event 'None Selected'
  853.                 settext event_time 'NA'
  854.                 settext event_date 'NA'
  855.                 settext arg1 '-'
  856.                 settext arg2 '-'
  857.                 settext arg3 '-'
  858.                 settext arg3 '-'
  859.                 settext rng1 '--'
  860.                 settext rng2 '--'
  861.                 settext sfx '-'
  862.                 settext txtstr '-'
  863.                 
  864.                 call eventparse()
  865.             end /* Above routine end */
  866.         end        /* rexx portcheck end */
  867.     end            /* do forever main loop end */
  868.     exit        /* end of program....subs follow */
  869.  
  870.  
  871.  
  872.  
  873. /* ===== SUB-ROUTINES START HERE ==== */
  874.  
  875. /* ===== PREFERENCES ===== */
  876.  
  877. prefs:
  878.     set time_format date_format gadget42 disable
  879.     call waitpkt( "PREFSWINPORT" )    /* Wait for a message from Varexx */
  880.     packet = getpkt( "PREFSWINPORT" )        /* Get the message */
  881.  
  882.     if packet ~= '00000000'x then do /* This is not a null message */
  883.         class  = getarg(packet)    /* Get the information about the message */
  884.            type = word(class, 1)
  885.                msg = substr(class, 12,100)
  886.             /*say 'class =' class
  887.             say 'msg =' msg*/    DEBUG STUFF
  888.  
  889.             if class = 'CLOSEWINDOW PrefsWindow' then do  /* This is strange */
  890.                 hide
  891.                 call eventparse()
  892.             end
  893.  
  894.             if class = exitprefs then do
  895.                 hide
  896.                 call eventparse()
  897.             end
  898.     
  899.             if class = texteditor then do
  900.                 editor = rtfilerequest(, , "Pick a text editor",OK, "rt_reqpos = reqpos_centerscr")
  901.                 if rtresult == 0 then call prefs() /*This get out of the edprefs function */
  902.                 open(edconfig,'EZCron:prefs/txted.prefs', 'w')
  903.                 writeln(edconfig, editor)
  904.                 close(edconfig)
  905.                 drop editor
  906.             end
  907.                 
  908.             if class = sfxplayer then do
  909.                 player = rtfilerequest(, , "Pick a sound player",OK, "rt_reqpos = reqpos_centerscr")
  910.                 if rtresult == 0 then call prefs() /*This get out of the edprefs function */
  911.                 open(edconfig,'EZCron:prefs/sfx.prefs', 'w')
  912.                 writeln(edconfig, player)
  913.                 close(edconfig)
  914.                 drop player
  915.             end
  916.             call prefs()
  917.     end    
  918.  
  919. /* ===== DATE FIELD REQUESTER ===== */
  920.  
  921. datefields:
  922.     field = ''
  923.     do forever
  924.         call waitpkt( "DATEWINPORT" )    /* Wait for a message from Varexx */
  925.         packet = getpkt( "DATEWINPORT" )        /* Get the message */
  926.     
  927.         if packet ~= '00000000'x then do /* This is not a null message */
  928.             class  = getarg(packet)    /* Get the information about the message */
  929.                type = word(class, 1)
  930.             msg = substr(class, 11,25)
  931.  
  932.             if field = '' then field = date(usa)
  933.             /*say 'field before the if string is' field*/
  934.             if msg = '0' then field = Date(USA)
  935.             if msg = '1' then field = 'Daily'
  936.             if msg = '2' then field = 'Monthly-'right(date(S),2)  /* Monthly-13 */ 
  937.             if msg = '3' then field = 'Sunday'
  938.             if msg = '4' then field = 'Monday'
  939.             if msg = '5' then field = 'Tuesday'
  940.             if msg = '6' then field = 'Wednesday'
  941.             if msg = '7' then field = 'Thursday'
  942.             if msg = '8' then field = 'Friday'
  943.             if msg = '9' then field = 'Saturday'
  944.             if msg = '10' then field = 'Sunday'
  945.             if msg = '11' then field = 'Weekdays'
  946.             if msg = '12' then field = 'Weekend'
  947.             if msg = '13' then field = 'Every_1_Mon'
  948.         
  949.             if class = 'CLOSEWINDOW DateWindow' then do
  950.                 hide
  951.                 address value host
  952.                 call eventparse()
  953.             end
  954.     
  955.             if class = exitdate then do
  956.                 hide
  957.                 address value host
  958.                 call eventparse()
  959.             end
  960.  
  961.             if class = okay then do
  962.                 hide
  963.                 address value host
  964.                 settext event_date field
  965.                 call eventparse()
  966.             end
  967.         end    
  968.     end
  969.  
  970. /* ===== TIME FIELD REQUESTER ===== */
  971.  
  972. timefields:
  973.     field = ''
  974.     do forever
  975.         call waitpkt( "TIMEWINPORT" )    /* Wait for a message from Varexx */
  976.         packet = getpkt( "TIMEWINPORT" )        /* Get the message */
  977.     
  978.         if packet ~= '00000000'x then do /* This is not a null message */
  979.             class  = getarg(packet)    /* Get the information about the message */
  980.                type = word(class, 1)
  981.             msg = substr(class, 11,25)
  982.  
  983.             if field = '' then field = LEFT(time('N'),5)
  984.             if msg = '0' then field = LEFT(time('N'),5)
  985.             if msg = '1' then field = 'Minute'
  986.             if msg = '2' then field = 'Hourly'
  987.             if msg = '3' then field = 'Quarterly'
  988.  
  989.             if class = 'CLOSEWINDOW timewindow' then do
  990.                 hide
  991.                 address value host
  992.                 call eventparse()
  993.             end
  994.     
  995.             if class = exittime then do
  996.                 hide
  997.                 address value host
  998.                 call eventparse()
  999.             end
  1000.  
  1001.             if class = okay then do
  1002.                 hide
  1003.                 address value host
  1004.                 settext event_time field
  1005.                 call eventparse()
  1006.             end
  1007.  
  1008.         end    
  1009.     end
  1010.  
  1011.  
  1012. mainhelp:
  1013.     do forever
  1014.         call waitpkt( "MAINWINPORT" )    /* Wait for a message from Varexx */
  1015.         packet = getpkt( "MAINWINPORT" )        /* Get the message */
  1016.  
  1017.         if packet ~= '00000000'x then do /* This is not a null message */
  1018.             class  = getarg(packet)    /* Get the information about the message */
  1019.                type = word(class, 1)
  1020.                    msg = substr(class, 12,100)
  1021.             /*say 'class =' class
  1022.             say 'msg =' msg*/        DEBUG STUFF
  1023.  
  1024.             if class = 'MAINHELP TRUE' then call eventparse()
  1025.  
  1026.             if class = getfile then call helpmessage('Calls file requester.')
  1027.             if class = timehelp then call helpmessage('Time field help gadget.')
  1028.             if class = timefields then call helpmessage('Time fields cycle gadget.')
  1029.             if class = datehelp then call helpmessage('Date field help.')
  1030.             if class = rangehelp then call helpmessage ('Time Range field help.')
  1031.             if class = datefields then call helpmessage('Date fields cycle gadget')
  1032.             if class = arg1gad then call helpmessage('Calls requester for file arguments')
  1033.             if class = arg2gad then call helpmessage('Calls requester for file arguments')
  1034.             if class = arg3gad then call helpmessage('Calls requester for file arguments')
  1035.             if class = arg4gad then call helpmessage('Calls requester for file arguments')
  1036.             if class = sfxgad then call helpmessage('Selects a sound file.')
  1037.             if class = txtgad then call helpmessage('Adds a text string.')
  1038.             if class = addevent then
  1039.                 call rtezrequest("ADD AN EVENT TO THE LIST." || LF ||,
  1040.                 "You MUST fill in your fields" || LF ||,
  1041.                 "BEFORE pushing the ADD gadget." || LF ||,
  1042.                 " ", "OKay", ,)
  1043.  
  1044.             if class = ac_new then call helpmessage('Creates a new s:cron.config file.')
  1045.             if class = delete_event then call helpmessage('Removes event from the list.')
  1046.             if class = edit then call helpmessage('Calls an external text editor.')
  1047.             if class = update then
  1048.                 call rtezrequest("UPDATES THE SELECTED EVENT." || LF ||,
  1049.                 "Select the event you wish to modify." || LF ||,
  1050.                 "Make the modifications you wish." || LF ||,
  1051.                 "Click the Modif gadget." || LF ||,
  1052.                 " ", "OKay", ,)    
  1053.  
  1054.             if class = testevent then call helpmessage('Tests the selected event')
  1055.             if class = purgegad then call helpmessage('Removes old, one time events.')
  1056.             if class = prefsgad then call helpmessage('Calls up the preferences window.')
  1057.             if class = end then call helpmessage('Exits editor window.')
  1058.             if class = closewindow then call helpmessage('Quits EZCron.')
  1059. /*            if class = addefault then call helpmessage('Saves selected event as default event.')*/
  1060.             if class = addefault then
  1061.                 call rtezrequest("SAVES THE SELECTED (CURRENT)" || LF ||,
  1062.                 "EVENT AS THE DEFAULT EVENT." || LF ||,
  1063.                 " " || LF ||,
  1064.                 "Whenever you select the NEW" || LF ||,
  1065.                 "gadget, it always adds an event" || LF ||,
  1066.                 "to the newly created list. This" || LF ||,
  1067.                 "is the default event." || LF ||,
  1068.                 "This may be set to a past" || LF ||,
  1069.                 "date if you wish for nothing to" || LF ||,
  1070.                 "take place." || LF ||,
  1071.                 " ", "OKay", ,)    
  1072.  
  1073.         end
  1074.     end
  1075.  
  1076. helpmessage: procedure
  1077.  
  1078.     call rtezrequest( arg(1),'Okay!','EZCron Online Help','rtez_flags=ezreqf_centertext',)
  1079.     return
  1080.  
  1081. message: procedure
  1082.  
  1083.     call rtezrequest( arg(1),'Okay!','EZCron ERROR','rt_reqpos = reqpos_centerscr rtez_flags=ezreqf_centertext',)
  1084.     return
  1085.  
  1086.  
  1087. /* ===== EXIT AND CLEAN UP ===== */
  1088.  
  1089. exiting:
  1090.     address command 'run >nil: avail flush'
  1091.     'hide unload'  /* Hide the window and unload the gui file from memory */
  1092.     call delay(15)
  1093.     call closeport( "MAINWINPORT" )  /* Close the port */
  1094.     address command 'run >nil: vxc'
  1095. exit
  1096.